package com.errol.batchprocessor.employeeaddition;

/**
 * EmployeeAddition 人员导入批处理
 * - 代码的扩展可以有两种方式：继承已有的类并重写部分方法、实现扩展点接口
 * - 需要注意这两种方式的作用范围和扩展限制有所不同，需要分析需求演变的可能性来选择
 * #
 * 子包说明：
 * - advisor：人员导入批处理的扩展点，继承自抽象批处理模型，人员导入实现中需要使用这些继承类扩展点
 * - advisorimpl：扩展点实现
 * -    common：人员导入的抽象实现，包含所有人员导入入口的公共逻辑
 * -    demand：接单导入实现，继承自 common 包下的抽象实现，包括批量导入和单条编辑两个实现
 * -    employee：人员列表导入实现，继承自 common 包下的抽象实现，包括批量导入和单条编辑两个实现
 * -    payroll：费用发放实现，继承自 common 包下的抽象实现，包括批量验证发放、单条编辑、发放压测三个实现
 * -        同时接入费用发放的验证流程的扩展，相关代码请看 {@link com.renjia.service.module.payroll} 包下实现
 * #
 * 重点类说明：
 * - EmployeeAdditionService & EmployeeAdditionServiceImpl：人员导入批处理实现，复用抽象批处理实现
 * - EmployeeMonitorService & EmployeeMonitorServiceImpl：人员导入监视器实现，复用抽象批处理监视器的实现
 * - EmployeeAdvisorContainer：人员导入扩展点容器，同样复用自抽象批处理扩展点容器，此类需要 @Primary 修饰
 * - EmployeeAdvisorTypeEnum：人员导入扩展类型，每个人员导入的批次都必须指定扩展类型
 * - AbstractEmployeeAdvisorImpl：人员导入批处理的抽象实现，子类通过继承和重写实现公共逻辑的复用和扩展
 * #
 * #
 * #
 * EmployeeAdvisorContainer 人员导入扩展点容器，其中的实现优先级排序：
 * [1,50] 用于批处理通用模型
 * #1 EmployeeAdditionTimeAdvisorImpl 人员导入执行时间统计输出（批次总用时，分片平均用时）
 * #
 * #41 EmployeeAdditionCountAdvisorImpl 人员导入（CoreEmployeeImportBatch表）统计值处理
 * #22 EmployeeAdditionPreloadAdvisorImpl 人员导入分片数据预加载扩展
 * #
 * [51,100] 用于人员导入批处理
 * #51 AbstractEmployeeAdvisorImpl 人员导入抽象实现，有以下子类：
 * - EmployeeListAdvisorImpl 人员列表导入
 * - DemandEmployeeAdvisorImpl 接单导入
 * - DemandEmployeeManageAdvisorImpl 接单导入单处理
 * - PayrollEmployeeAdvisorImpl 费用发放对人员导入的扩展，其中接入了费用发放验证阶段的扩展点（{@link com.renjia.service.module.payroll.advisor.verify}）
 * * - - 注意费用发放验证阶段的扩展点，执行优先级“从属于” #51，扩展点实现请看 {@link com.renjia.service.module.payroll.advisorimpl} 包下的内容
 * - PayrollEmployeeManageAdvisorImpl 发放明细编辑（新增）的扩展
 * - TestPayrollEmployeeAdvisorImpl 费用发放的压测扩展
 * #
 */
